草庐IT

Java Swingworker 和多线程

全部标签

C++ - Clutter 1.0 - 从线程调用函数导致段错误

我正在努力从一个额外的线程调用一个困惑的函数。我使用boost::thread进行线程处理和clutter库1.0。具体来说,该线程包含一个循环函数,该函数每隔一段时间发出带有x和y坐标参数的boost::signals2::signal。该信号连接到一个函数,该函数将这些变量交给困惑,即x,yinclutter_stage_get_actor_at_pos(CLUTTER_STAGE(actor),CLUTTER_PICK_ALL,x,y);这就是我遇到段错误的地方。显然clutter有一些线程处理例程。我试着打电话g_thread_init(NULL);clutter_thread

c++ - 线程安全设置

我正在编写一些可以在我的多线程应用程序中随处访问的设置类。我会经常读取这些设置(因此读取访问应该很快),但不会经常写入它们。对于原始数据类型,它看起来像boost::atomic提供我需要的东西,所以我想到了这样的东西:classUInt16Setting{private:boost::atomic_Value;public:uint16_tgetValue()const{return_Value.load(boost::memory_order_relaxed);}voidsetValue(uint16_tvalue){_Value.store(value,boost::memory

c++ - 多个动态链接库(DLL)是否可以从静态库(LIB)共享线程本地存储

我有一个由许多DLL文件组成的游戏。其中一些DLL链接到同一个静态库(LIB)。所以像这样:Game.exe->Root.dll->Child.dll|||'->Common.lib(contains__declspec(thread))|'->Common.lib(contains__declspec(thread))Root.dll加载静态链接Common.lib的Child.dll。Root还静态链接Common.lib。因为Common是静态链接的,所以它直接编译到加载dll中(例如Root和Child)。Common.lib包含一个使用线程本地存储(TLS)的变量。__dec

c++ - 减少具有相同优先级的线程之间的上下文切换

我正在编写一个使用第三方库执行繁重计算的应用程序。这个库在内部实现并行并产生给定数量的线程。我想运行这个库的几个(动态计数)实例,因此最终会严重超额使用cpu。有什么方法可以增加进程中所有线程的“时间量”,例如所有具有正常优先级的线程很少进行上下文切换(yield),除非它们通过例如显式地yield信号量?这样我就可以避免超额使用CPU的大部分性能开销。请注意,在这种情况下,我不关心线程是否饿了几秒钟。编辑:执行此操作的一种复杂方法是​​手动执行线程调度。枚举具有特定优先级(例如正常)的所有线程。暂停所有这些。创建一个循环来恢复/暂停线程,例如40毫秒,并确保没有运行比当前CPU计数更

【Linux】多线程(线程概念+线程控制)

🌇个人主页:平凡的小苏📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风翻盘。🛸C++专栏:Linux内功修炼家人们更新不易,你们的👍点赞👍和⭐关注⭐真的对我真重要,各位路过的友友麻烦多多点赞关注。欢迎你们的私信提问,感谢你们的转发!关注我,关注我,关注我,你们将会看到更多的优质内容!!一、Linux线程概念1、什么是线程在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”。一切进程至少都有一个执行线程。线程在进程内部运行,本质是在进程地址空间内运行。在Linux

c++ - 如何在多线程中使用模板类型作为槽和信号参数?

我可以以任何方式使用模板类型作为槽或信号参数吗?例如,我正在尝试定义以下内容:voidexampleSignal(std::maparg);voidexampleSlot(std::maparg);这会在运行时产生以下结果:QObject::connect:Cannotqueueargumentsoftype'std::map'(Makesure'std::map'isregisteredusingqRegisterMetaType().)正在尝试注册std::map与Q_DECLARE_METATYPE()导致编译失败并且显然不受支持。作为解决方法,我使用QVariantMap而不是

c++ - OpenMP 代码远比串行慢 - 内存或线程开销瓶颈?

我正在尝试并行化(OpenMP)一些科学C++代码,其中大部分(>95%)的CPU时间花在计算N阶的讨厌(且不可避免)O(N^2)交互上~200种不同的颗粒。该计算重复1e10个时间步长。我用OpenMP尝试了各种不同的配置,每一个都比串行代码慢一些(至少一个数量级),并且随着额外的内核的添加,扩展性很差。下面是相关代码的草图,具有代表性的虚拟数据层次结构Tree->Branch->Leaf。每个Leaf对象存储自己的位置和当前和前三个时间步长的速度,等等。然后每个Branch存储一组Leaf对象,每个Tree存储一组Branch对象。这种数据结构非常适合复杂但CPU密集度较低的计算,

c++11 注册缓存线程安全

在volatile:TheMultithreadedProgrammer'sBestFriend,AndreiAlexandrescu给出了这个例子:classGadget{public:voidWait(){while(!flag_){Sleep(1000);//sleepsfor1000milliseconds}}voidWakeup(){flag_=true;}...private:boolflag_;};他说,...thecompilerconcludesthatitcancacheflag_inaregister...itharmscorrectness:afteryouca

c++ - 线程池的 lambda 函数内部的编译器错误变量 "Not captured"

我正在学习C++中的多线程并尝试设置线程池,但我收到一个编译器错误,提示“错误:‘mapperNodes’未被捕获”和“错误:‘command’未被捕获”。我读过一些关于使用“this”来捕获lambda中的变量的内容,但到目前为止没有任何效果。如何在下面的代码中使用线程池lambda函数中的command和mapperNodes变量?voidMapReduceServer::spawnMappers()throw(){vectormapperNodes(nodes);random_shuffle(mapperNodes.begin(),mapperNodes.end());strin

c++ - 我可以在 C++ 中仅使用 std::atomic 而不使用 std::mutex 安全地跨线程共享变量吗?

我制作了一个在多核上计算素数的程序。(请忽略该算法并非完全有效,这里将数字0和1视为质数。目的只是练习使用线程。)变量taken(接下来要测试的数字)正在8个线程之间共享。问题是它可以由一个线程递增,紧接着由另一个线程递增,并在它已经递增两次(或更多次)时被它们读取,因此可以跳过一些值,这是一件坏事。我以为它可以通过使用std::atomic_uint作为变量类型来解决,但我显然错了。有什么方法可以在不需要使用std::mutex的情况下解决这个问题,因为我听说它会导致相当大的开销?源代码:#include#include#include#include#include#include